Multiplication of two 32-bit numbers is commonly used in digital signal processing (DSP), usually when a large dynamic range is needed. A regular 32-bit multiplication can be implemented using four 16-bit multipliers; however, the 16-bit multipliers should be capable of accepting both signed and unsigned inputs. Complex number multiplication is an increasingly common operation in digital signal processors (DSPs). A complex number is represented as X+iY, where X represents the real part, Y represents the imaginary part, and i represents the square root of −1. A 32-bit complex number has 32 bits representing the real part X and another 32 bits representing the imaginary part Y. To multiply two complex numbers, X1+iY1 and X2+iY2, the computation is typically broken up into four multiplications as illustrated in the following Equation 1:(X1+iY1)(X2+iY2)=(X1X2−Y1Y2)+i(X1Y2+Y1X2).   EQ. 1
In a conventional DSP that has a single fixed point multiplier available, the four multiplications can be performed sequentially and the sums and differences formed. For a typical programmable DSP, an addition or subtraction can be performed in parallel with the multiplication, with each of the multiplications or additions taking a cycle. In conventional programmable DSPs that contain two or more multipliers operating in parallel, the multipliers are typically general purpose devices, and each multiplier is a replica of the other. In the conventional multi-multiplier DSP, the complex multiplication takes less time because more than one multiplication can be performed in parallel. For example, in a DSP with four parallel multipliers, the four cross-products (i.e., X1X2, Y1Y2, X1Y2, Y1X2) can be calculated in parallel.
Conventional methods make use of both regular signed and unsigned 16-bit multipliers to perform a 32-bit complex multiplication. The disadvantage of the conventional methods is that sixteen operations (instructions) are needed to perform one 32-bit multiplication. Some conventional DSPs have signed versions of 16-bit complex multipliers, but no unsigned versions of the 16-bit complex multipliers. In DSPs without an unsigned version of the 16-bit complex multipliers, no regular use can be made of the complex multipliers.
It would be desirable to have a method of implementing 32-bit complex multiplication using only 16-bit signed complex multipliers.